package com.leecode.base;


/**
 * @description: 动态规划基础篇 - 一维数组
 * <p>
 * 问题描述：一只青蛙一次可以跳上1级台阶，也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
 * <p>
 * 核心思想： 小 --> 大
 * 定义 dp[i] 的含义为：跳上一个 i 级的台阶总共有 dp[i] 种跳法
 * dp[n] = dp[n-1] + dp[n-2]。
 * @date: 2023/2/27 12:12
 * @author: yaoshubin
 * @version: 1.0
 */
public class index_20_动态规划 {

    public static void main(String[] args) {

        int dp = dp(3);
        System.out.println(dp);

    }


    public static int dp(int n) {
        if (n <= 1) {
            return n;
        }

        //创建一个新数组，保存历史数组,n+1 是预留一个初始位置0并赋值0,为了n-2不越界
        int[] dp = new int[n + 1];
        //初始值 i=0，i=1
        dp[0] = 0;
        dp[1] = 1;

        // 通过关系式来计算出 dp[n]
        for (int i = 2; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }

        return dp[n];

    }
}
